package com.woniuxy.shirotest;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.env.BasicIniEnvironment;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;

import java.util.Set;

public class ShiroPerm {
    public static void main(String[] args) {
//        1.加载配置文件 ini文件
        BasicIniEnvironment basicIniEnvironment = new BasicIniEnvironment("classpath:shiro-perm.ini");
//        2.通过这个环境来获取 SecurityManager对象
        SecurityManager securityManager = basicIniEnvironment.getSecurityManager();
//        3.把SecurityManager绑定到当前的运行环境中
        SecurityUtils.setSecurityManager(securityManager);
//        4.创建主体 subject！！！！！核心代码 我们一定 要有操作主体！！
        Subject subject = SecurityUtils.getSubject();
        //上述代码就是 框架底层自己写好的代码 实际开发中，环境和SecurityManager
        //是框架帮我们实现 我们只需要用第四步操作即可
//        5.构造登录主体的凭证，提供用户名和密码  后端的一个实体类，用来封装我们的账号密码
        UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("mayuhang","654321");
//        6.通过主体的login方法，和我们封装好的对象，系统自动帮我们进行认证判断
        subject.login(usernamePasswordToken);
        //只要第6步能够完成，那么就能进行权限判断
        boolean permitted = subject.isPermitted("user:delete");
        boolean permitted1 = subject.isPermitted("user:find");
        System.out.println("该用户："+subject.getPrincipal()+"有没有user:delete权限："+permitted);
        System.out.println("该用户："+subject.getPrincipal()+"有没有user:find权限："+permitted1);
        boolean role3 = subject.hasRole("role3");
        System.out.println("该用户："+subject.getPrincipal()+"有没有role3角色："+role3);

        System.out.println("用户登录成功，认证状态是："+subject.isAuthenticated());
        //获取一下用户信息
        System.out.println("从主体中获取校长："+subject.getPrincipal());
    }
}
